package com.hakim.wfb.dao;

import com.hakim.wfb.bean.User;
import com.hakim.wfb.customer.params.team.ActivateMemberParameter;
import com.hakim.wfb.customer.params.team.GetTeamMemberParameter;
import com.hakim.wfb.customer.params.user.QueryCustomerWebPageParameter;
import com.hakim.wfb.customer.result.team.TeamInvestRecordView;
import com.hakim.wfb.customer.result.team.TeamLevelDetailView;
import com.hakim.wfb.customer.result.team.TeamMemberInfoView;
import com.hakim.wfb.customer.result.team.TeamOutlineView;
import com.hakim.wfb.customer.result.user.UserDetailView;
import com.hakim.wfb.customer.result.user.UserView;
import com.hkfs.fundamental.database.PageDaoBase;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserDao extends PageDaoBase<User, String> {

    /**
     * 通过登录名查找用户
     *
     * @param userCode
     * @return
     */
    User getUserByUserCode(@Param("userCode") String userCode);

    /**
     * 通过手机号查找用户
     *
     * @param userCode
     * @return
     */
    User getUserByUserPhone(@Param("userPhone") String userCode);

    /**
     * 通过身份证查找用户
     *
     * @param userCode
     * @return
     */
    User getUserByCardNo(@Param("cardNo") String userCode);

    /**
     * 有效投资用户
     *
     * @param userOrg
     * @return
     */
    int countByUserOrgActivated(@Param("userOrg") String userOrg);

    /**
     *
     * @param userOrg
     * @return
     */
    List<User> getUsersByUserOrg(@Param("userOrg") String userOrg);

    /**
     *
     * @param userOrg
     * @return
     */
    User getUserByUserOrg(@Param("userOrg") String userOrg);

    /**
     *
     * @param userOrg
     * @return
     */
    User getUserByOrg(@Param("userOrg") String userOrg);

    /**
     * 查询用户详情
     *
     * @param userId
     * @return
     */
    UserDetailView getUserDetail(@Param("userId") String userId);

    /**
     * 查询用户详情
     *
     * @param tid
     * @return
     */
    UserDetailView getUserByTid(@Param("tid") String tid);

    /**
     * 获取团队会员列表
     *
     * @param parameter
     * @return
     */
    List<TeamMemberInfoView> getTeamMembers(GetTeamMemberParameter parameter);

    /**
     * 统计会员数
     *
     * @param parameter
     * @return
     */
    int countTeamMembers(GetTeamMemberParameter parameter);

    /**
     * 获取用户直推用户
     *
     * @param parameter
     * @return
     */
    List<TeamMemberInfoView> getChildren(GetTeamMemberParameter parameter);

    /**
     * 统计用户直推用户
     *
     * @param parameter
     * @return
     */
    int countChildren(GetTeamMemberParameter parameter);

    /**
     * 获取团队会员信息概要
     *
     * @param userOrg
     * @return
     */
    TeamOutlineView getTeamOutline(@Param("userOrg") String userOrg);

    /**
     * 获取团队等级详情
     *
     * @param userOrg
     * @return
     */
    TeamLevelDetailView getTeamLevelInfo(@Param("userOrg") String userOrg);

    /**
     * 获取团队会员投资记录列表
     *
     * @param userOrg
     * @return
     */
    List<TeamInvestRecordView> getTeamInvestRecord(@Param("userOrg") String userOrg);

    /**
     * 激活团队成员
     *
     * @param parameter
     * @return
     */
    int activateMember(ActivateMemberParameter parameter);

    /**
     * @param user
     * @return
     */
    int activateUser(User user);

    /**
     * 统计团队成员数
     *
     * @param userOrg
     * @param activeStatus
     * @return
     */
    int queryTeamMemberCount(@Param("userOrg") String userOrg, @Param("activeStatus") Integer activeStatus);

    /**
     * 查询直推子用户
     *
     * @param userParent
     * @param activeStatus
     * @return
     */
    int queryChildMemberCount(@Param("userParent") String userParent, @Param("activeStatus") Integer activeStatus);

    /**
     * 获取用户团队大区业绩
     *
     * @param userOrg
     * @return
     */
    double queryTeamAchieveSum(@Param("userOrg") String userOrg);

    /**
     * 获取用户团队小区业绩
     *
     * @param userId
     * @return
     */
    double queryGroupAchieveSum(@Param("userId") String userId);

    /**
     * @param parentId
     * @return
     */
    List<User> getDirectUsers(@Param("parentId") String parentId);

    /**
     * @param parentId
     * @return
     */
    int countDirectActivated(@Param("parentId") String parentId);

    /**
     * 查询用户列表
     *
     * @param param
     * @return
     */
    List<UserView> queryUserList(QueryCustomerWebPageParameter param);

    /**
     * 查询用户列表记录数
     *
     * @param param
     * @return
     */
    int queryUserCount(QueryCustomerWebPageParameter param);

    /**
     * @param parentId
     * @return
     */
    List<User> getDirectActivatedUsers(@Param("parentId") String parentId);

    /**
     * @param userid
     */
    void resetLogPwd(@Param("userid") String userid);

    /**
     * @param userid
     */
    void restTranPwd(@Param("userid") String userid);

    /**
     * @param userid
     * @return
     */
    Integer qrySumInvest(@Param("userid") String userid);
}
